/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.si3.controlador;


import com.si3.modelo.Login;
import com.si3.modelo.ObjetoAnio;

import com.si3.modelo.PaginaInfo;
import com.si3.modelo.Profesor;
import com.si3.modelo.Propuesta;
import com.si3.modelo.Usuario;
import com.si3.servicio.PropuestasService;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.view.RedirectView;

public class GetPropuestasController extends SimpleFormController
{
    private PropuestasService propuestasService;
	private Calendar fFecha;
	PaginaInfo paginainfo;
	List <Propuesta> propuestas;
    List<ObjetoAnio> anios;
    

    public PropuestasService getPropuestasService()
    {
        return propuestasService;
    }

    public void setPropuestasService(PropuestasService propuestasService)
    {
        this.propuestasService = propuestasService;
    }
  
   
    public GetPropuestasController()
    {
        setCommandClass(ObjetoAnio.class);
        setCommandName("year");
        setFormView("listaPropuestas");
        setSuccessView("listaPropuestas");    
    	paginainfo = new PaginaInfo();
    	propuestas= null;
    	anios=null;
    	fFecha=Calendar.getInstance();
    }          
    
    private void setPageInfo(PaginaInfo paginainfo,String page)
    {
    	if (page==null)
      	  paginainfo.setCurrentPage(0);
      	else
      	  paginainfo.setCurrentPage(Integer.parseInt(page));   	
    }

    @Override
    protected Map referenceData(HttpServletRequest request, Object command, Errors errors) throws Exception 
    {
    	Map referenceData = new HashMap();
        
        //get login token

        Login login = (Login) request.getSession().getAttribute("login");
        String page = (String)request.getParameter("page");  
        ObjetoAnio objetoanio = (ObjetoAnio) command;
        int anio=fFecha.get(Calendar.YEAR);
        if ((objetoanio!=null) &&(objetoanio.getYear()!=null))
        {        	
      	  anio=Integer.parseInt(objetoanio.getYear());
        }
        setCommandClass(ObjetoAnio.class);
        setCommandName("year");  
  
        if (login.getUserType() == Usuario.TipoUsuario.PROFESOR)
        {
        	paginainfo.setRowCount(propuestasService.getCountProfesor(anio,(Profesor)login.getUsuario()));        	
        	this.setPageInfo(paginainfo, page);
         	propuestas = propuestasService.getPropuestasProfesor(anio,(Profesor)login.getUsuario(),paginainfo);       
        	referenceData.put("tipo", "profesor");
        }
        
        else  
        {       	
        
          paginainfo.setRowCount(propuestasService.getCount(anio));
          this.setPageInfo(paginainfo, page);      
          propuestas = propuestasService.getPropuestas(anio,paginainfo);
   	  
  
          if (login.getUserType() == Usuario.TipoUsuario.ADMIN)
          {
            referenceData.put("tipo", "administrador");
          }
          else if (login.getUserType() == Usuario.TipoUsuario.ALUMNO)
          {
        	referenceData.put("tipo", "alumno");  
        	  
          }

        }    
  	    anios = propuestasService.getAnios(); 
  	    if (anios.size()==0)
        {
           setFormView("showMessage");
           referenceData.put("message", "No existe actualmente ninguna Propuesta");
        }
        else
        {     
	        referenceData.put("years", anios); 
	        referenceData.put("propuestas", propuestas);
	        referenceData.put("paginainfo", paginainfo);
        }
        return referenceData;    
   
	}
    
    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, 
                                    HttpServletResponse response, 
                                    Object command, 
                                    BindException errors) throws Exception 
    {
    	ObjetoAnio objetoanio = (ObjetoAnio) command;
        Login login = (Login) request.getSession().getAttribute("login");
        ModelAndView mv = new ModelAndView("listaPropuestas");
        int anio=fFecha.get(Calendar.YEAR);
        if ((objetoanio!=null) &&(objetoanio.getYear()!=null))
        {        	
      	  anio=Integer.parseInt(objetoanio.getYear());
        }
        setCommandClass(ObjetoAnio.class);
        setCommandName("year");  
        if (login.getUserType() == Usuario.TipoUsuario.PROFESOR)
        {
        	paginainfo.setRowCount(propuestasService.getCountProfesor(anio,(Profesor)login.getUsuario()));        	
        	this.setPageInfo(paginainfo, "1");
         	propuestas = propuestasService.getPropuestasProfesor(anio,(Profesor)login.getUsuario(),paginainfo);       
        	mv.addObject("tipo", "profesor");
        }
        
        else  
        {       	
        
          paginainfo.setRowCount(propuestasService.getCount(anio));
          this.setPageInfo(paginainfo, "1");      
          propuestas = propuestasService.getPropuestas(anio,paginainfo);
  
          if (login.getUserType() == Usuario.TipoUsuario.ADMIN)
          {
            mv.addObject("tipo", "administrador");
          }
          else if (login.getUserType() == Usuario.TipoUsuario.ALUMNO)
          {
        	mv.addObject("tipo", "alumno");  
        	  
          }

        }   
  	    anios = propuestasService.getAnios(); 
        mv.addObject("year", objetoanio);     
        mv.addObject("years", anios); 
        mv.addObject("propuestas", propuestas);
        mv.addObject("paginainfo", paginainfo);
        return mv;    
   
	}

    
}
